package com.ccp.dev.system.dao;


import com.ccp.dev.core.basic.base.IBaseMapper;
import com.ccp.dev.core.basic.web.query.QueryFilter;
import com.ccp.dev.system.model.SysUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;


/**
 * 用户dao
 * @author y
 */
@Mapper
public interface SysUserDao extends IBaseMapper<SysUser,String> {
    /**
     * account 验证是否已经存在
     * @param account 账号
     * @return int
     */
    int isAccountExist(String account);
    /**
     * account 验证是否已经存在
     * @return int
     */
    int isAccountExistByTenantId(Map map);
    /**
     * 设置在线离线状态
     */
    void upOnlineStatusById();

    /**
     * 重置密码
     * @param map 参数
     */
    void updatePwd(Map map);

    /**
     * 修改状态
     * @param sysUser 参数
     */
    void updateStatus(SysUser sysUser);

    /**
     * 设置领导
     * @param userIds
     */
    void setLeaderByIds(@Param("userIds") String[] userIds);

    /**
     * 取消领导
     * @param userId
     */
    void delLeader(String userId);

    /**
     * 根据account获取用户
     * @param account 账号
     * @return SysUser
     */
    SysUser getByAccount(String account);

    /**
     * 根据account获取用户列表
     * @param account 账户
     * @return list
     */
    List<SysUser> queryByAccount(String account);

    /**
     * 根据account获取用户列表
     * 2020-05-26 jyq添加，由于同一租户下可存在相同的账户名称
     * @param account 账户
     * @return list
     */
    List<SysUser> queryByAccountWithOrgPath(String account);

    /**
     * 根据用户更新在线状态
     * @param map 参数
     */
    void upOnlineStatusById(Map map);

    /**
     * 根据用户更新ip
     * @param map 参数
     */
    void updCurrIpById(Map map);
    /**
     * 根据条件查询用户
     * @param queryFilter 查询参数
     * @return list
     */
    List<SysUser> queryUsersByOrg(QueryFilter queryFilter);

    /**
     * 更新登录异常次数
     * @param map 查询条件
     */
    void updateMissNumber(Map map);

    /**
     * 是否锁定
     * @param map 查询条件
     */
    void updateIsLock(Map map);

    /**
     * 根据角色id查询
     * @param roleId
     * @return
     */
    List<SysUser> queryByRoleId(String roleId);
    /**
     * 根据角色列表获取人员。
     * @param list
     * @return
     */
    List<SysUser> queryByRoleIds(List<String> list);

    /**
     * 根据组织id查询
     * @param orgId
     * @return
     */
    List<SysUser> queryByOrgId(String orgId);

    /**
     * 根据岗位id查询
     * @param posId
     * @return
     */
    List<SysUser> queryByPosId(String posId);

    /**
     * 查询相同职务的用户
     * @param userId
     * @return
     */
    List<SysUser> queryJobUsersByUserId(String userId);

    /**
     *查询相同岗位的用户
     * @param userId
     * @return
     */
    List<SysUser> queryPosUsersByuserId(String userId);
    /**
     *查询相同组织的用户
     * @param userId
     * @return
     */
    List<SysUser> queryOrgUsersByuserId(String userId);
    /**
     * 根据传入的组织获取用户列表。
     *
     * @param list
     * @return
     */
    List<SysUser> queryByOrgIds(List<String> list);

    /**
     * 根据用户id查询用户姓名
     * @param ids id数组
     * @return list
     */
    List<String> queryUserNameByUserIds(List<String> ids);

    List<SysUser> getByAccounts(List<String> accounts);

    /**
     * 通过身份证获取用户
     * @param idCard
     * @return
     */
    SysUser getByIdCard(String idCard);

    void batchUpdateUserTenantId(@Param("userIds") List<String> userIds, @Param("tenantId") String tenantId);

    void updateSortNumber(Map<String, Object> param);

    List<SysUser> findByAccountAndTenantId(@Param("account")String account, @Param("tenantId")String tenantId);

    List<SysUser> findByUserIds(@Param("userIds") List<String> userIds);

    List<SysUser> findByAccountsAndTenantId(@Param("accounts") List<String> accounts, @Param("tenantId")  String tenantId);
}